﻿#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable : 6031)
#include <stdio.h>
//-----------------------------------------------------------------------------------------------------------------------------
//1. 一维数组
//-----------------------------------------------------------------------------------------------------------------------------
//1.4.1 访问一维数组中单个元素时通过下标访问，举例：
//int main()
//{
//	int yuluo[10] = {1,2,3,4,5,6,7,8,9,10};
//	printf("%d\n",yuluo[5]);
//}

//1.4.2 访问一维数组中整个数组内的元素通过for循环，下标访问，举例：
//int main()
//{
//	int yuluo[10] = {1,2,3,4,5,6,7,8,9,10};
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ",yuluo[i]);
//	}
//}

//1.4.3 访问一维数组时，自己给数组输入想要的数据后，举例：
//int main()
//{
//	int yuluo[10] = {1,2,3,4,5,6,7,8,9,10};
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d",&yuluo[i]);
//	}
//
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ",yuluo[i]);
//	}
//}

//1.4.4 根据一维数组在内存中的存储方式，打印出数组所有元素的地址，举例：
//int main()
//{
//	int yuluo[5] = {1,2,3,4,5};
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		printf("&yuluo[%d] = %p\n",i,&yuluo[i]);
//	}
//}

//1.4.5 用sizeof计算数组大小，举例：
//int main()
//{
//	int yuluo[5] = {0};
//	printf("%zu",sizeof(yuluo));
//}

//1.4.6 用sizeof计算数组内元素个数，举例：
//int main()
//{
//	int yuluo[6] = {0};
//	int sz = sizeof(yuluo) / sizeof(yuluo[0]);
//	printf("%d",sz);
//}
//-----------------------------------------------------------------------------------------------------------------------------
//2. 二维数组
//-----------------------------------------------------------------------------------------------------------------------------
//2.4.1 根据行号和列数（n - 1）的下标来定位访问单个元素的访问输出，举例：
//int main()
//{
//	int yuluo[3][5] = {1,3,5,7,9,  2,4,6,8,10,  3,4,5,6,7};
//	printf("%d",yuluo[2][2]);
//}

//2.4.2 根据行号和列数（n-1）的下标来定位访问整个二维数组的访问输入和输出，举例：
//int main()
//{
//	int yuluo[3][5] = {1,3,5,7,9,  2,4,6,8,10,  3,4,5,6,7};
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < 3; i++)
//	{
//		for (j = 0; j < 5; j++)
//		{
//			scanf("%d",&yuluo[i][j]);
//		}
//	}
//
//	printf("---------\n");
//
//	for (i = 0; i < 3; i++)
//	{
//		for (j = 0; j < 5; j++)
//		{
//			printf("%d ",yuluo[i][j]);
//		}
//		printf("\n");
//	}
//}

//2.4.3 根据二维数组在内存中的存储方式，打印出数组内所有元素地址，举例：
//int main()
//{
//	int yuluo[3][5] = {1,3,5,7,9,  2,4,6,8,10,  3,4,5,6,7};
//	int i = 0;
//	int j = 0;
//	for (i = 0; i< 3; i++)
//	{
//		for (j = 0; j < 5; j++)
//		{
//			printf("&yuluo[%d][%d] = %p\n", i, j, &yuluo[i][j]);
//		}
//	}
//}

//2.5 变长数组（VS2022没有支持C99中的变长数组，以下代码可以在gcc编译器中测试）
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int yuluo[n];
//	int i = 0;
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &yuluo[i]);
//	}
//	for (i = 0; i < n; i++)
//	{
//		printf("%d ",yuluo[i]);
//	}
//}
//-----------------------------------------------------------------------------------------------------------------------------
//3. 数组练习
//-----------------------------------------------------------------------------------------------------------------------------
//3.1 练习1：多个字符从两端移动向中间汇聚
//执行思路
//1. 定义索引0，索引长度-1
//2. 直到两个索引相遇或者交叉时交换各索引
//3. 当左索引下标大于或等于右索引下标则结束

//执行过程
//1. 定义1，2个字符串数组
//2. 定义左，右下标索引
//3. 输出第2个数组内容
//4. 循环while判断当左下标<=右下标时
//    数组1左下标内容覆盖数组2左下标内容
//    数组1右下标内容覆盖数组2右下标内容
//    左下标++
//    右下标--
//    再次输出数组2内容
//#include <string.h>
//int main()
//{
//	char yuluo1[] = "I love you...";
//	char yuluo2[] = "#############";
//	size_t left = 0;
//	size_t right = strlen(yuluo1) - 1;
//	printf("%s\n", yuluo2);
//
//	while (left <= right)
//	{
//		yuluo2[left] = yuluo1[left];
//		yuluo2[right] = yuluo1[right];
//		left++;
//		right--;
//		printf("%s\n",yuluo2);
//	}
//}

//3.2 练习2：二分查找
//执行思路
//1. 前提是数组必须有序的，例如：升序排序
//2. 初始化边界（索引0和索引长度-1）
//3. 循环查找
//4. 终止条件

//执行过程
//1. 定义数组
//2. 定义并初始化左，右下标
//3. 定义查找指定数值
//4. 定义二分查找判断数mid
//5. 定义一个标志变量
//6. 定义while循环，当左下标小于等于右下标时
//	 定位二分查找mid
//	 判断当mid大于指定数值时，右下标等于mid-1
//	 或者当mid小于指定数值时，左下标等于mid+1
//	 亦或者标志变量为真，跳出循环
//7. 用if语句判断当标志变量为真时，则找到了指定数值的下标，否则找不到
//int main()
//{
//	int yuluo[] = {1,2,3,4,5,6,7,8,9};
//	int left = 0;
//	int right = sizeof(yuluo) / sizeof(yuluo[0]) - 1;
//	int ye = 5;
//	int mid = 0;
//	int find = 0;
//	while (left<=right)
//	{
//		mid = left + (right - left) / 2;
//		if (yuluo[mid] > ye)
//		{
//			right = mid - 1;
//		}
//		else if (yuluo[mid] < ye)
//		{
//			left = mid + 1;
//		}
//		else
//		{
//			find = 1;
//			break;
//		}
//	}
//
//	if (find == 1)
//	{
//		printf("找到了，ye的下标为：%d\n",mid);
//	}
//	else
//		printf("找不到...");
//}











